home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / NETLIST / HESSE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-23  |  842 b   |  42 lines

  1. // the implementation of class HESSE
  2. // Copyright (C) 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  3.  
  4. #include <math.h>
  5.  
  6. #include "hesse.h"
  7.  
  8. HESSE::HESSE(const SEGMENT& seg)
  9. {
  10.   const XY_DBL& p1 = seg.p1();
  11.   const XY_DBL& p2 = seg.p2();
  12.   m_a = p2.y() - p1.y();
  13.   m_b = p1.x() - p2.x();
  14.   m_c = p2.y() * p1.x() - p1.y() * p2.x();
  15.  
  16.   if(m_c < 0) {
  17.     m_a = - m_a;
  18.     m_b = - m_b;
  19.     m_c = - m_c;
  20.   }
  21.  
  22.   double t = sqrt(m_a * m_a + m_b * m_b);
  23.  
  24.   if(t != 0) {
  25.     m_a /= t;
  26.     m_b /= t;
  27.     m_c /= t;
  28.     m_angle = (0 <= m_b) ? acos(m_a) : 0 - acos(m_a);
  29.   } else {
  30.     m_c = 0;
  31.     m_angle = 0;
  32.   }
  33.  
  34.   m_h.get_point_on_circle(XY_DBL(0, 0), m_c, m_angle);
  35.  
  36.   if(p1.x() == p2.x()) {
  37.     m_on_segment = seg.is_y_on_segment(m_h.y());
  38.   } else {
  39.     m_on_segment = seg.is_x_on_segment(m_h.x());
  40.   }
  41. }
  42.